#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QDebug>
#include <QFileDialog>
#include <QDir>
#include <QListWidget>
#include <QProcess>
#include <QScrollBar>

MainWindow::MainWindow(QWidget *parent)//这是 MainWindow 类的构造函数。构造函数的目的是初始化窗口，创建窗口中的各种组件并设置它们的初始状态。
    : QMainWindow(parent)//是 MainWindow 类的构造函数的初始化列表部分。这部分负责调用父类的构造函数，并将 parent 作为参数传递给父类构造函数。
    , ui(new Ui::MainWindow)//这行代码创建了一个名为 ui 的新的 Ui::MainWindow 对象。这个对象用于访问和操作 UI 文件中定义的各种组件。
{
    ui->setupUi(this);//这行代码调用了 setupUi() 函数，它是在 UI 文件中自动生成的一个函数，
                      //负责将 UI 文件中定义的各种组件添加到窗口中，并将它们连接到 ui 对象上。
    setWindowTitle("software");   //窗口命名为software
    setWindowIcon(QIcon(":./icon/icon.webp"));// 图标
//    setFixedSize(800,600);//设置固定大小


    player=new QMediaPlayer(this);
    player->setNotifyInterval(2000);


    playerWidgets=new QVideoWidget(this);
    player->setVideoOutput(playerWidgets);

    ui->VideoPlayer->addWidget(playerWidgets);


    playerWidgets->setAutoFillBackground(true);



    QPalette qplte;
    qplte.setColor(QPalette::Window,QColor(255,255,255));
    playerWidgets->setPalette(qplte);


    connect(ui->OnStart, &QPushButton::clicked, this, &MainWindow::onStartButtonClicked);
    connect(ui->OnPlay, &QPushButton::clicked, this, &MainWindow::on_OnPlay_clicked);

}

MainWindow::~MainWindow()//这是 MainWindow 类的析构函数。析构函数的目的是在窗口关闭时清理资源，释放内存。
{
    delete player;
    delete playerWidgets;
    delete ui;//这行代码释放了在构造函数中创建的 ui 对象，以防止内存泄漏。
}




// 按钮选择视频文件
void MainWindow::on_OnSetMediaFile_clicked()
{
    ui->textEdit->clear();
    QString currentpath = QDir::currentPath();//获取当前路径

    QString dlgtitle="请选择视频文件";
    QString strfilter="MP4 Files(*.mp4);;ALL Files(*.*)";

    QString allfiles=QFileDialog::getOpenFileName(this,dlgtitle,currentpath,strfilter);
    if(allfiles.isEmpty())
    {
        QMessageBox::critical(this,"错误","打开视频文件失败，请重新检查！",QMessageBox::Yes);
        return;
    }
    QFileInfo fileinformation(allfiles);//获取文件信息
    filePath = fileinformation.filePath();
    ui->lablecurrentname->setText(filePath);

    player->setMedia(QUrl::fromLocalFile(allfiles));
    qDebug() <<filePath;
// player->play();
    // 停止播放视频
    player->pause();
}


// 按钮开始程序
void MainWindow::onStartButtonClicked() {
    ui->textEdit->clear();
    player->setPosition(0);
    QProcess *process = new QProcess(this);
<<<<<<< HEAD
    // process ->setWorkingDirectory("/home/openkylin/final/code/models");
=======
>>>>>>> ed5d6aa6a7337ea3e3cd2f213b639e50dc58d674
    process ->setWorkingDirectory("/home/openkylin/CQUBAND2024/code/models");
    // 运行你的可执行文件
    qDebug() <<filePath;
   // QString program = "/home/openkylin/riscv/v6.0/bin/demo";
    QString program = "/home/openkylin/CQUBAND2024/code/bin/demo";
    //define models
   // QString models1 = "/home/openkylin/CQUBAND2024/code/models/water.bin";
   // QString models2 = "/home/openkylin/CQUBAND2024/code/models/water.param";
   // QString models3 = "/home/openkylin/CQUBAND2024/code/models/lifejack.param";
   // QString models4 = "/home/openkylin/CQUBAND2024/code/models/lifejack.bin";
    QStringList arguments;
    arguments << filePath << "-email";
    // 启动 .exe 文件并传入参数（如果有）
    process->start(program, arguments);

    // 连接信号 readyReadStandardOutput() 以获取输出内容
    connect(process, &QProcess::readyReadStandardOutput, this, &MainWindow::onProcessReadyRead);
    player->play();

    // 等待进程完成
    process->waitForStarted();
    QScrollBar *scrollBar = ui->textEdit->verticalScrollBar();
    scrollBar->setValue(scrollBar->maximum());
}
//将print的内容输出到output框
void MainWindow::onProcessReadyRead()
{
    QProcess *process = qobject_cast<QProcess*>(sender());
    if(process)
    {
        QByteArray output = process->readAllStandardOutput();
        ui->textEdit->append(QString::fromUtf8(output));
    }
}
//暂停按钮
//void MainWindow::on_OnCheck_clicked()
//{
//     player->pause();
//}


void MainWindow::on_OnPlay_clicked()
{
   // QString filepath2 = "/home/openkylin/CQUBAND2024/qt/output.mp4";
<<<<<<< HEAD
    // QString filepath2 = "/home/openkylin/final/code/models/output.mp4";
=======
>>>>>>> ed5d6aa6a7337ea3e3cd2f213b639e50dc58d674
    QString filepath2 = "/home/openkylin/CQUBAND2024/code/models/output.mp4";
    player->setMedia(QUrl::fromLocalFile(filepath2));
    qDebug() << filepath2 <<"------------" ;
    player -> play();
}
